#include <stdio.h>
#include <math.h>

bool isPrime(int n)
{
	//预剪枝 
	if(n==2||n==3) 
		return true;
	if(n%6!=1 && n%6!=5)
		return false;
		
	float n_sqrt=floor(sqrt(n)); //取整 
	
	//大于5的质数一定和6的倍数相邻
	//因此素数要出现只可能出现在6x的相邻两侧。因此在5到sqrt(n)中每6个数只判断2个
	for(int i=5;i<=n_sqrt;i+=6)
	{
	    if(n%(i)==0||n%(i+2)==0) 
			return false;
	}
    return true;
}

int main()
{ 
	int a,b;
	scanf("%d%d",&a,&b);
	if(a>1) //从2开始才有质数合数的分别 
	{
		int num=0;
		for(int i=a;i<=b;i++)
		{
			if(isPrime(i))
			{
				printf("%d ",i);
				num++;
			}
		}
		printf("素数个数为%d",num);
	}
}